package 力扣;
//给你两个数组，arr1 和 arr2，
//
//    arr2 中的元素各不相同
//    arr2 中的每个元素都出现在 arr1 中
//
//对 arr1 中的元素进行排序，使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。
//
public class 数组的相对排序 {
    public static void main(String[] args) {
       int[] arr1={2,3,1,3,2,4,6,7,9,2,19};
       int[] arr2={2,1,4,3,9,6};
        int[] ints = relativeSortArray(arr1, arr2);
        for (int i :
                ints) {
            System.out.print(i+" ");
        }
    }
    public static int[] relativeSortArray(int[] arr1, int[] arr2) {
        int[] map = new int[1001];
        int[] res = new int[arr1.length];
        //统计arr1中各元素出现的个数
        for (int i = 0; i < arr1.length; i++) {
            map[arr1[i]]++;
        }
        int count=0;
        for (int i = 0; i < arr2.length; i++) {
           while (map[arr2[i]]>0){
               res[count++]=arr2[i];
               map[arr2[i]]--;
           }
        }
        //循环map数组，将剩余元素加进res中
        for (int i = 0; i < 1001; i++) {
            while(map[i]>0) {
                res[count++] = i;
                map[i]--;
            }
        }
        return res;
    }
}
